// 数据库各种方法的封装

module.exports = {
    // 增
    // 利用回调函数封装，处理异步的结果
    //     insert(colName, data, success, error) {
    //         colName.insertMany(data, (err) => {
    //             if (err) {
    //                 error(err);
    //             } else {
    //                 success("insert ok");
    //             }
    //         })
    //     }


    // 使用promise封装， 处理异步的结果
    insert({ colName, data }) {
        return new Promise((resolve, reject) => {
            colName.insertMany(data, (err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve("insert ok");
                }
            })
        })
    },

    // 删
    delete({ colName, where = {}, num = 1 }) {
        //num为1表示，删除单条；非1表示，删除多条
        const type = num === 1 ? "deleteOne" : "deleteMany";
        // console.log(type);
        return new Promise((resolve, reject) => {
            colName[type](where, (err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve("delete ok");
                }
            })
        })
    },

    // 改
    update({ colName, where = {}, num = 1 }) {
        const tupe = num === 1 ? "updateOne" : "updateMany";
        return new Promise((resolve, reject) => {
            colName[type](where, (err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve("update ok");
                }
            })
        })
    },

    // 根据指定条件去查
    get({ colName, where = {} }) {
        return new Promise((resolve, reject) => {
            colName.find(where, { _id: 0, __v: 0 }, (err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        })
    },

    // 查分页
    getPage({ colName, whert = {}, index = 0, num = 10 }) {
        return new Promise((resolve, reject) => {
            colName.find(where, { _id: 0, __v: 0 }).limit(num).skip(index * num).exec((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        })
    },
    // 排序查
    getSort({ colName, where = {}, stor = {} }) {
        return new Promise((resolve, reject) => {
            colName.find(where, { _id: 0, __v: 0 }).sort(sort).exec((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        })
    },

    // 查分类
    getMold({ colName, keyWorld }) {
        return new Promise((resolve, reject) => {
            colName.distinct(keyWorld).exec((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        })
    },

    // 查数量
    getLen({ colName }) {
        return new Promise((resolve, reject) => {
            colName.countDocuments().exec((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            })
        })
    }

}